home *** CD-ROM | disk | FTP | other *** search
- {$A-}
- program chapter1;
- {$I TOOLU.PAS}
- var cmdptr:file;
-
- PROCEDURE COPY;
- VAR C:CHARACTER;
- BEGIN
- WHILE(GETC(C)<>ENDFILE)DO
- PUTC(C)
- END;
-
-
- PROCEDURE CHARCOUNT;
- VAR
- NC:INTEGER;
- C:CHARACTER;
- BEGIN
- NC:=0;
- WHILE (GETC(C)<>ENDFILE)DO
- NC:=NC+1;
- PUTDEC(NC,1);
- PUTC(NEWLINE)
- END;
-
- PROCEDURE LINECOUNT;
- VAR
- N1:INTEGER;
- C:CHARACTER;
- BEGIN
- N1:=0;
- WHILE(GETC(C)<>ENDFILE)DO
- IF(C=NEWLINE)THEN
- N1:=N1+1;
- PUTDEC(N1,1);
- PUTC(NEWLINE)
- END;
-
- PROCEDURE WORDCOUNT;
- VAR
- NW:INTEGER;
- C:CHARACTER;
- INWORD:BOOLEAN;
- BEGIN
- NW:=0;
- INWORD:=FALSE;
- WHILE(GETC(C)<>ENDFILE)DO
- IF(C=BLANK)OR(C=NEWLINE)OR(C=TAB) THEN
- INWORD:=FALSE
- ELSE IF (NOT INWORD)THEN BEGIN
- INWORD:=TRUE;
- NW:=NW+1
- END;
- PUTDEC(NW,1);
- PUTC(NEWLINE)
- END;
-
- PROCEDURE DETAB;
- CONST
- MAXLINE=1000;
- TYPE
- TABTYPE=ARRAY[1..MAXLINE] OF BOOLEAN;
- VAR
- C:CHARACTER;
- COL:INTEGER;
- TABSTOPS:TABTYPE;
-
- FUNCTION TABPOS(COL:INTEGER;VAR TABSTOPS:TABTYPE)
- :BOOLEAN;
- BEGIN
- IF(COL>MAXLINE)THEN
- TABPOS:=TRUE
- ELSE
- TABPOS:=TABSTOPS[COL]
- END;
-
- PROCEDURE SETTABS(VAR TABSTOPS:TABTYPE);
- CONST
- TABSPACE=4;
- VAR
- I:INTEGER;
- BEGIN
- FOR I:=1 TO MAXLINE DO
- TABSTOPS[I]:=(I MOD TABSPACE = 1)
- END;
-
- BEGIN
- SETTABS(TABSTOPS);
- COL:=1;
- WHILE(GETC(C)<>ENDFILE)DO
- IF(C=TAB)THEN
- REPEAT
- PUTC(BLANK);
- COL:=COL+1
- UNTIL(TABPOS(COL,TABSTOPS))
- ELSE IF(C=NEWLINE)THEN BEGIN
- PUTC(NEWLINE);
- COL:=1
- END
- ELSE BEGIN
- PUTC(C);
- COL:=COL+1
- END
- END;
-
-
- PROCEDURE COMMAND;
- VAR I:INTEGER;XS:XSTRING;B:BOOLEAN;
- S:PACKED ARRAY[1..3]OF CHAR;
-
- BEGIN
- B:=GETARG(1,XS,MAXSTR);
- IF (B=TRUE)THEN BEGIN
- for i:=1 to 3 do begin
- s[i]:=chr(xs[i]);
- if s[i]in['a'..'z']then s[i]:=chr(xs[i]-32)
- end;
- END
- ELSE ERROR('Command:no arguments');
-
- IF (S='COP') THEN COPY
- ELSE IF (S='CHA') THEN CHARCOUNT
- ELSE IF (S=
- 'LIN') THEN LINECOUNT
- ELSE IF (S=
- 'WOR') THEN WORDCOUNT
- ELSE IF (S=
- 'DET') THEN DETAB
- END;(*COMMAND*)
-
-
-
-
-
- BEGIN
- command;
- ENDCMD;assign(cmdptr,'SHELL.COM');execute(cmdptr)
- END.
-
-
-
-
-
-